/*
 * ==================================================================
 * Pardal - Framework for Classification Hierarchical and Multilabel.
 * ==================================================================
 * 
 * Copyright (C) 2013-2014 
 *  Valdigleis da Silva Costa
 *  Araken Medeiros Santos
 *  Daniel Sabino Amorim de Araujo
 *
 *  Departamento de Ciências Exatas, Tecnologicas e Humanas (DCETH) 
 *  Grupo de Modelos Computacionais e Cognitivos (GMCC)
 *  Campus Angicos (CA)
 *  Universidade Federal Rural do Semi-árido (UFERSA)
 *
 *  Project Info: (Site em desenvolvimento)
 * 
 * Framework Pardal is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * Framework Pardal is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 * 
 * ==================================================================
 * Pardal - Framework para Classificação Hierárquica e Multirrótulo.
 * ==================================================================
 * 
 * Copyright (C) 2013-2014 
 *  Valdigleis da Silva Costa
 *  Araken Medeiros Santos
 *  Daniel Sabino Amorim de Araujo
 *
 *  Departamento de Ciências Exatas, Tecnologicas e Humanas (DCETH) 
 *  Grupo de Modelos Computacionais e Cognitivos (GMCC)
 *  Campus Angicos (CA)
 *  Universidade Federal Rural do Semi-árido (UFERSA)
 *
 * Informações sobre o projeto: (Site em Desenvolvimento)
 * 
 * O Framework Pardal é um software livre; você pode redistribui-lo e/ou
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como 
 * publicada pela Fundação do Software Livre (FSF); na versão 2 da 
 * Licença, ou (na sua opnião) qualquer versão.
 * 
 * O Framework Pardal é distribuido na esperança que possa ser util, 
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO
 * a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, escreva para a Fundação do Software
 * Livre(FSF) Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

package pardal.core.manipulation.arff;

import java.util.ArrayList;

/**
 * Classe que implementa um caminho do nó raiz há um ná folha ou nó galho.
 * 
 * @author Valdigleis
 * @version 1.0
 */
public class RoteNodos {
    
    private ArrayList<Nodo> nodos;

    /**
     * Construtor vazio
     */
    public RoteNodos() {
        this.nodos = new ArrayList<>();
    }

    /**
     * Construtor com a lista de nós que descreve um caminho na hierárquia.
     * 
     * @param nodos - Nós que compõem o caminho
     */
    public RoteNodos(ArrayList<Nodo> nodos) {
        this.nodos = nodos;
    }

    /**
     * Recupera o caminho de Nodos da Raiz ao destino.
     * @return nodos - A lista que descreve o caminho da raiz até um determinado Nodo de destino.
     */
    public ArrayList<Nodo> getNodos() {
        return nodos;
    }

    /**
     * Seta o caminho do Nodo a Raiz há um Nodo destino.
     * @param nodos - A lista que descreve o caminho da raiz até um determinado Nodo de destino.
     */
    public void setNodos(ArrayList<Nodo> nodos) {
        this.nodos = nodos;
    }
    
    /**
     * Método que captura o n-nessímo Nodo do caminho.
     * @param index - Posição do Nodo desejado.
     * @return - Retorna o Nodo desejado caso a posição sejá valída ou Null caso a posição seja invalída.
     */
    public Nodo getNodoByIndex(int index){
        if(index < this.nodos.size() && index >= 0){
            return this.nodos.get(index);
        }else{
            return null;
        }
    }
    
    /**
     * Método que adiciona um Nodo no final do caminho.
     * @param nodo 
     */
    public void SetNodoInFinal(Nodo nodo){
        this.nodos.add(nodo);
    }
    
    /**
     * Método que seta um nodo em uma posição específica.
     * 
     * @param index - Posição a ser inserido o Nodo.
     * @param nodo - Nodo a ser inserido.
     */
    public void SetNodoByIndex(int index, Nodo nodo){
        this.nodos.add(index, nodo);
    }
    
    public String getInfosRote(){
        
        String msg = "";
        for(int i = 0; i < this.nodos.size(); i++){
            msg = msg.concat(this.nodos.get(i).getInfosNodo()+ "\n");
        }
        return msg;
    }
    
}
